package java44th.group.service.wx.order;

import java44th.group.bean.common.BasePageInfo;
import java44th.group.bean.common.CommonData;
import java44th.group.bean.po.MarketOrderGoods;
import java44th.group.bean.wx.bo.order.WxOrderAndGoodsCommentBo;
import java44th.group.bean.wx.bo.order.WxOrderCommitBo;
import java44th.group.bean.wx.vo.order.WxOrderCommitVo;
import java44th.group.bean.wx.vo.order.WxOrderDetailVo;
import java44th.group.bean.wx.vo.order.WxOrderStatusCount;

/**
 * @Aurhor: 帅的一批
 * @CreateAt: 2022/10/14 10:06
 * @Description:
 * @PACKAGE_NAME： java44th.group.service.wx.order
 */
public interface WxOrderService {
    /**
     * 通过用户id和对应的订单 type去查询订单列表
     * @return
     *  1. null 发生错误
     *  2. 非null 成功
     */
    CommonData getOrderListByShowType(BasePageInfo basePageInfo, Integer showType,Integer userId);

    /**
     * 通过订单id 查询订单详情
     * @param orderId
     * @return
     *  1. null 发生错误
     *  2. 非null 成功
     */
    WxOrderDetailVo getOrderDetailById(Integer orderId);

    /**
     * 售后状态 修改的是 aftersale_status
     * 售后状态，
     * 0是可申请，
     * 1是用户已申请，
     * 2是管理员审核通过，
     * 3是管理员退款成功，
     * 4是管理员审核拒绝，
     * 5是用户已取消
     * @return
     *  1. false 更新失败
     *  2. true 更新成功
     */
    boolean updateRefundstatus(Integer orderId,Short aftersaleStatus);

    /**
     *
     *  101: '未付款',
     *  102: '用户取消',
     *  103: '系统取消',
     *  201: '已付款',
     *  202: '申请退款'
     *  203: '已退款',
     *  301: '已发货',
     *  401: '用户收货',
     *  402: '系统收货'
     * @param orderId 订单id
     * @param orderStatus  订单状态
     * @return
     *  是否修改成功
     */
    boolean updateOrderstatus(Integer orderId, short orderStatus);

    /**
     * 根据订单id逻辑删除订单
     * @param orderId
     * @return
     */
    boolean deleteOrderById(Integer orderId);

    /**
     * 根据用户id,商品id,订单id获取订单商品信息 orderGoods表
     * @param orderId
     * @param goodsId
     * @param userId
     * @return
     */
    MarketOrderGoods getGoodsInfoByGidAndOidToComment(Integer orderId, Integer goodsId, Integer userId);

    /**
     * 用户对已经完成订单的商品进行评论
     * @param wxOrderAndGoodsCommentBo
     * @return
     *  1. 是否发送错误
     */
    boolean orderAndGoodsComment(WxOrderAndGoodsCommentBo wxOrderAndGoodsCommentBo);

    /**
     *
     * 用户支付成功 修改订单状态
     * @param orderId
     * @return
     */
    boolean prepayOrderById(Integer orderId);

    /**
     * 用户登录成功以后获取对应的订单状态数量
     * @return
     */
    WxOrderStatusCount getOrderStatusCount();

    /**
     *  用户确认收款之后 评论数量应该增加对应数量
     * @param orderId
     */
    void updateCommonts(Integer orderId);

    /**
     * 用户确认订单
     * @param wxOrderCommitBo
     * @return
     */
    WxOrderCommitVo orderCommit(WxOrderCommitBo wxOrderCommitBo);
}
